#include <bits/stdc++.h>
const int N = 200010;
typedef long long ll;
using namespace std;
int n, a[N],
    t[N],        // t[i]表示树状数组i结点覆盖的范围和
    Less[N],     // Less[i]表示左边比第i个位置小的数的个数
    Greater[N];  // [i] 表示左边比第i个位置小的数的个数
int lowbit(int x) { return x & -x; }

// 将序列中第 x 个数加上 k
void add(int x, int k) {
  for (int i = x; i <= n; i += lowbit(i)) t[i] += k;
}

// 查询序列前 x 个数的和
int query(int x) {
  int sum = 0;
  for (int i = x; i > 0; i -= lowbit(i)) sum += t[i];
  return sum;
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; ++i) cin >> a[i];

  // 从左向右，依次统计每个位置左边比第i个数y小的数的个数、以及大的数的个数
  for (int i = 1; i <= n; ++i) {
    int y = a[i];
    // 在前面已加入树状数组的所有数中统计在区间[1, y - 1]的数字的出现次数
    Less[i] = query(y - 1);
    // 在前面已加入树状数组的所有数中统计在区间[y + 1, n]的数字的出现次数
    Greater[i] = query(n) - query(y);
    add(y, 1);
  }
  memset(t, 0, sizeof t);
  ll resA = 0, resV = 0;
  for (int i = n; i >= 1; --i) {
    int y = a[i];
    resA += 1LL * Less[i] * query(y - 1);
    resV += 1LL * Greater[i] * (query(n) - query(y));

    add(y, 1);
  }
  cout << resV << ' ' << resA << '\n';
}
